package com.example.theadadmin.controller;

import com.example.theadadmin.entity.User;
import com.example.theadadmin.service.IUserService;
import com.example.theadadmin.vo.AccountVo;
import com.example.theadadmin.vo.ForgetVo;
import com.example.theadadmin.vo.Result;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 * @author 王东
 * @since 2024-09-05
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping("/list")
    public List<User> list() {
        return userService.list();
    }

    @RequestMapping("/getById")
    public User getById(int id) {
        return userService.getById(id);
    }

    @RequestMapping("/add")
    public String add() {
        User user = new User();
        userService.save(user);
        return "success";
    }

    /**
     * 注册接口
     * @param account
     * @return
     */
    @PostMapping("/register")
    public Result register(@Valid @RequestBody AccountVo account) {
         userService.register(account);
         return Result.success("注册成功");
    }

    /**
     * 登录接口
     * @param username
     * @param password
     * @return
     */
    @PostMapping("/login")
    public Result login(String username, String password) {
        User user  = userService.login(username,password);
        if (user != null) {
            return Result.success(user);
        }
        return null;
    }

    /**
     * 重置密码接口
     * @param forgotPwdVo
     * @return
     */
    @PostMapping("/resetPwd")
    public Result resetPwd(ForgetVo forgotPwdVo) {
         userService.resetPwd(forgotPwdVo);
         return Result.success("密码重置成功");
    }

    /**
     * 验证用户名是否存在
     * @param forgetVo
     * @return
     */
    @PostMapping("/validateCode")
    public Result validateCode(@RequestBody ForgetVo forgetVo) {
        User userByName = userService.getUserByName(forgetVo.getUsername());
        if (StringUtils.isEmpty(forgetVo.getUsername())) {
            return Result.failure("用户名不能为空");
        }
        if (userByName == null) {
            return Result.failure("用户名不存在");
        }
        return Result.success();
    }

    /**
     * 验证身份证是否存在
     */
    @PostMapping("/validateIdCard")
    public Result validateIdCard(@RequestBody ForgetVo forgetVo) {
        User userByName = userService.getUserByName(forgetVo.getIdCard());
        if(StringUtils.isEmpty(forgetVo.getUsername())){
            return Result.failure("用户名不能为空");
        }
        if(StringUtils.isEmpty(forgetVo.getIdCard())){
            return Result.failure("身份证号码不能为空");
        }
        if(userByName == null){
             return Result.failure("身份证号码不存在");
        }
        if(!userByName.getIdCard().equals(forgetVo.getIdCard())){
            return Result.failure("身份证号码不存在");
        }
        return Result.success();
    }


    /**
     * 上传文件接口
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public String handleFileUpload(@RequestParam("file") MultipartFile file) {

        if (file.isEmpty()) {
            return "文件为空，请选择一个文件上传。";
        }
        try {
            // 获取文件名
            String fileName = file.getOriginalFilename();

            // 获取文件的字节
            byte[] bytes = file.getBytes();

            // 这里可以添加你的文件保存逻辑，例如保存到磁盘或数据库

            return "文件上传成功： " + fileName;
        } catch (Exception e) {
            return "文件上传失败： " + e.getMessage();
        }
    }
}
